package com.qhong.util;

import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import java.util.Date;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

/**
 * Created by qhong on 2018/6/7 15:32
 **/
@ConfigurationProperties(prefix = "jwt")
@Component
public class JwtUtils {
	private Logger logger = LoggerFactory.getLogger(getClass());

	private String secret;
	private long expire;
	private String header;

	/**
	 * 生成jwt token
	 */
	public String generateToken(long userId) {
		Date nowDate = new Date();
		//过期时间
		Date expireDate = new Date(nowDate.getTime() + expire * 1000);

		return Jwts.builder()
				.setHeaderParam("typ", "JWT")
				.setSubject(userId+"")
				.setIssuedAt(nowDate)
				.setExpiration(expireDate)
				.signWith(io.jsonwebtoken.SignatureAlgorithm.HS512, secret)
				.compact();
	}

	public Claims getClaimByToken(String token) {
		try {
			return Jwts.parser()
					.setSigningKey(secret)
					.parseClaimsJws(token)
					.getBody();
		}catch (Exception e){
			logger.debug("validate is token error ", e);
			return null;
		}
	}

	/**
	 * token是否过期
	 * @return  true：过期
	 */
	public boolean isTokenExpired(Date expiration) {
		return expiration.before(new Date());
	}

	public String getSecret() {
		return secret;
	}

	public void setSecret(String secret) {
		this.secret = secret;
	}

	public long getExpire() {
		return expire;
	}

	public void setExpire(long expire) {
		this.expire = expire;
	}

	public String getHeader() {
		return header;
	}

	public void setHeader(String header) {
		this.header = header;
	}
}